
/* 
     对于state来说, 无论是否设置命名空间, 都会对应模块名称,将数据存储到根Store的state对象中

    $store.state = {
        a:1,
        b:2,
        demo:{
            x:1
        },
        user:{
            name:"张三",
            age:18
        }
    }


    设置命名空间 => 对应模块名称挂载 (只针对 getters mutations action)
        getters中的计算属性  => 直接对应 模块名称和 属性名挂载到 根store实例的getters对象中
        mutations 中的同步方法 => 直接对应 模块名称和方法名  挂载到 根store实例的_mutations对象中
        action 中的异步方法  => 直接对应  模块名称和方法名  挂载到 根store实例的_actions对象中
        
        => 调用属性和方法时 需要对应模块名称

        store -> user(true) -> zhang(false)
        $store = {
            getters:{
                "user/isGrowUp":function(){}
            }
            _mutations:{
                "user/addAge":function(){}
            }
            _actions:{
                "user/addAge_Async":function(){}
            }
        }


*/


// 每一个模块都是一个store对象(state getters mutations action)  => 最终挂载到根Store
export default { 
    namespaced: true, // 设置命名空间 => 对应模块名称挂载
    state(){
        return {
            name:"张三",
            age:18,
        }
    },
    getters:{
        isGrowUp(state){
            return state.age >=18;
        }
    },
    mutations:{
        addAge(state){
            state.age ++;
        },
        reduceAge(state){
            state.age --;
        }
    },
    actions:{
        // context  => 当前store实例
        addAge_Async(context){
            console.log(context); // {state,getters,rootState,rootGeeters,commit,dispatch}
            let {commit} = context;
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    commit("addAge");
                    resolve(true);
                },2000)
            })
        },
        reduceAge_Async(context){
            console.log(context); // {state,getters,rootState,rootGeeters,commit,dispatch}
            let {commit} = context;
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    commit("reduceAge");
                    resolve(true);
                },2000)
            })
        }
    },

}

